// import fetch from 'dva/fetch';
// import { routerRedux } from 'dva/router';
// import store from '../index';
// function parseJSON(response) {
//   return response.json();
// }

// function checkStatus(response) {
//   const { dispatch } = store._store;

//   if (response.status == 302) {
//     console.log("302 NOT FOUND", response);
//   }

//   console.log("response", response);

//   if (response.status >= 200 && response.status < 300) {
//     return response;
//   }

//   const error = new Error(response.statusText);
//   error.response = response;
//   throw error;
// }

// /**
//  * Requests a URL, returning a promise.
//  *
//  * @param  {string} url       The URL we want to request
//  * @param  {object} [options] The options we want to pass to "fetch"
//  * @return {object}           An object containing either "data" or "err"
//  */
// export default function request(url, options) {
//   return fetch(url, options)
//     .then(checkStatus)
//     .then(parseJSON)
//     .then(data => ({ data }))
//     .catch(err => ({ err }));
// }


/**
 * 一、功能：
 * 1. 统一拦截http错误请求码；
 * 2. 统一拦截业务错误代码；
 * 3. 统一设置请求前缀
 * |-- 每个 http 加前缀 baseURL = /api/v1，从配置文件中获取 apiPrefix
 * 4. 配置异步请求过渡状态：显示蓝色加载条表示正在请求中，避免给用户页面假死的不好体验。
 * |-- 使用 NProgress 工具库。
 *
 * 二、引包：
 * |-- axios：http 请求工具库
 * |-- NProgress：异步请求过度条，在浏览器主体部分顶部显示蓝色小条
 * |-- notification：Antd组件 > 处理错误响应码提示信息
 * |-- routerRedux：dva/router对象，用于路由跳转，错误响应码跳转相应页面
 * |-- store：dva中对象，使用里面的 dispatch 对象，用于触发路由跳转
 */

// 设置全局参数，如响应超市时间，请求前缀等。
import axios from 'axios';
import router from 'umi/router';
import { apiPrefix } from './config';
axios.defaults.method = 'GET';
axios.defaults.timeout = 10000;
axios.defaults.withCredentials = true;
axios.defaults.maxRedirects = 0;
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'; //这个可以避免重定向到首页

export default function request (opt) {
  // 调用 axios api，统一拦截
  opt.url = apiPrefix + opt.url;
  return axios(opt)
    .then((response) =>{
      // >>>>>>>>>>>>>> 请求成功 <<<<<<<<<<<<<<
      const { method = 'GET', url = '未知URL'} = opt;
      console.log(`【${method} ${url}】请求成功，响应数据：%o`, response);

      return { ...response };
    })
    .catch((error) => {
      // >>>>>>>>>>>>>> 请求失败 <<<<<<<<<<<<<<
      // 请求配置发生的错误
      if (!error.response) {
        return console.log('Error', error.message);
      }

      // 响应时状态码处理
      const status = error.response.status;


      // 存在请求，但是服务器的返回一个状态码，它们都在2xx之外


      // 开发时使用，上线时删除
      console.log(`【${opt.method} ${opt.url}】请求失败，响应数据：%o`, error.response);
      if(status === 316) {
        router.push('/User/Login');
      }

      return { code: status };
    });
}
